package com.lu.pojo.generic;

import java.util.ArrayList;

/**
 * @author luzhenfang
 * @date 2020 07 07
 * @description 泛型测试类
 */
public class Test {
    static class Student{
        String id;
        String name;

        public Student(String id, String name) {
            this.id = id;
            this.name = name;
        }
    }
    public static void main(String[] args) {
        // 传统做法 用Object 基类 来存放数据
        DefaultContainer defaultContainer = new DefaultContainer(3);
        defaultContainer.set(new Student("1","张三"),0);
        defaultContainer.set(new Integer(3),1);
        defaultContainer.set(new Student("3","王五"),2);
        // 使用时 强制类型转换取出
        Student o = (Student) defaultContainer.get(0);
        System.out.println(o.name);
        // 这里就出现了问题  因为我放入的不是 Student 类型 强制类型转换就会出现问题
        // Student o1 = (Student) defaultContainer.get(1);



         // 传统 类型不安全 有很大的安全隐患
        System.out.println(o.name);


        // 泛型
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("1","张三"));
        // 这样就做了安全检查 在运行时发现错误,减少不必要的错误,提高了代码的可读性
        // students.add(new Integer(1));
        
        
        
        
        
        
        // 使用自己的泛型类
        GenericContainer<String, Integer> genericContainer = new GenericContainer<>();
        genericContainer.setFirst("tom");
        genericContainer.setSecond(1);
        System.out.println("genericContainer.getFirst() = " + genericContainer.getFirst());
        System.out.println("genericContainer.getSecond() = " + genericContainer.getSecond());
        // 泛型方法
        genericContainer.<Integer>printTest(1);
        // 当然也可以省略 <String>
        genericContainer.printTest("HelloWorld");

        GenericContainer.printArr(1,2,3,4,5,6,7,8);





    }
}
